"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > تغيير مستوى سجل وقت التشغيل باستخدام Golang وGoFr

تغيير مستوى سجل وقت التشغيل باستخدام Golang وGoFr

تم النشر بتاريخ 2024-07-30
تصفح:414

في هذه المقالة، سأشارك كيف يمكنك تغيير مستوى السجل لتطبيقك دون إعادة تشغيل التطبيق الخاص بك.

مقدمة

تُعتبر مستويات السجل عادةً مرتبة حسب الأهمية: قم بتشغيل المستويات "غير المهمة" في التطوير (الإشعار والتصحيح وما شابه)، ولكن قم بتمكين المستويات "الأكثر أهمية" فقط (التحذير والخطأ وما إلى ذلك) في الإنتاج، حيث تكون الموارد مثل وقت وحدة المعالجة المركزية ومساحة القرص ثمينة.

ولكن ماذا لو كان تطبيقك يعمل على مستوى الخطأ وبدأت تواجه العديد من المشكلات، لكن لا يمكنك معرفة ذلك من سجلات مستوى الخطأ، فإن تغيير مستوى السجل عن طريق إعادة نشر التطبيق سيستغرق الكثير من الوقت والموارد.

علاوة على ذلك، فإن تشغيل تطبيقك على مستوى INFO أو DEBUG في الإنتاج سيؤدي إلى إنشاء عدد كبير من السجلات التي يمكن أن تطغى على نظام التسجيل، مما يؤدي إلى زيادة عمليات الإدخال/الإخراج واستهلاك الموارد.

لإنقاذنا من هذه المشكلات، يوفر GoFr - The Ultimate Golang Framework طريقة آمنة لتغيير مستوى السجل دون إعادة تشغيل التطبيق الخاص بك.

تغيير مستوى السجل

لتغيير مستوى السجل، يتطلب أي تطبيق GoFr التكوين التالي:

REMOTE_LOG_URL= (e.g., https://log-service.com/log-levels?id=1)

يقوم GoFr بجلب نقطة النهاية المقدمة كل 15 ثانية بشكل افتراضي للحصول على أحدث مستوى للسجل، ويمكن زيادة هذا الفاصل الزمني أو تقليله عن طريق إضافة التكوين التالي.

REMOTE_LOG_FETCH_INTERVAL= (default: 15)

خدمة مستوى السجل

يتطلب GoFr الرد من عنوان URL بالتنسيق التالي مع حقلين إلزاميين:

{
    "data": {
       "serviceName": "test-service",
       "logLevel": "DEBUG"
    }
}

لنقم بإنشاء خدمة على مستوى السجل والتي ستوفر مستوى السجل لتطبيقنا.

سأستخدم GoFr لإنشاء الخدمة، راجع الوثائق لمعرفة المزيد.

سنستخدم MySQL كقاعدة بيانات، ولإضافة MySQL أضف التكوينات التالية في ملف .env في دليل التكوينات.

DB_HOST=localhost
DB_USER=root
DB_PASSWORD=password
DB_NAME=log-level
DB_PORT=2001
DB_DIALECT=mysql

لتشغيل حاوية MySQL docker قم بتشغيل الأمر التالي

docker run --name gofr-logger -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=log-level -p 2001:3306 -d mysql:8.0.30

لنضيف ملف main.go مع عمليات الترحيل لإنشاء جدول وسنستخدم ميزة AddRESTHandler لتسجيل المسار.

main.go

package main

import (
 "gofr.dev/pkg/gofr"
 "gofr.dev/pkg/gofr/migration"
)

const createTable = `CREATE TABLE level (
    id INT PRIMARY KEY,
    service_name VARCHAR(255) NOT NULL,
    log_level VARCHAR(50) NOT NULL
);
`

func createTableLevel() migration.Migrate {
 return migration.Migrate{
  UP: func(d migration.Datasource) error {
   _, err := d.SQL.Exec(createTable)
   if err != nil {
    return err
   }

   return nil
  },
 }
}

type Level struct {
 ID          int    `json:"id"`
 ServiceName string `json:"serviceName"`
 LogLevel    string `json:"logLevel"`
}

func (u *Level) RestPath() string {
 return "level"
}

func main() {
 app := gofr.New()

 app.Migrate(map[int64]migration.Migrate{1: createTableLevel()})

 err := app.AddRESTHandlers(&Level{})
 if err != nil {
  app.Logger().Fatalf("Failed to register routes for level struct: %v", err)
 }

 app.Run()
}

بعد تشغيل خدمة السجل سنرى السجلات التالية:

LOGS FOR LOG-LEVEL CHANGE SERVICE STARTUP

لدينا جميع مسارات REST المسجلة.

لإنشاء خدمة أرسل الطلب التالي:

curl --location 'localhost:8000/level' \
--header 'Content-Type: application/json' \
--data '{
    "id":1,
    "logLevel":"INFO",
    "serviceName":"gofr-app"
}'

لتحديث مستوى السجل أرسل الطلب التالي:

curl --location --request PUT 'localhost:8000/level/1' \
--header 'Content-Type: application/json' \
--data '{
    "id":1,
    "logLevel":"DEBUG",
    "serviceName":"gofr-app"
}'

للحصول على مستوى السجل أرسل الطلب التالي:

curl --location 'localhost:8000/level/1'

سيتم استخدام نفس عنوان URL في تكوينات تطبيقنا الذي يجب تغيير مستوى السجل الخاص به عن بعد.

خاتمة

باستخدام ميزة تغيير مستوى السجل عن بعد GoFr، سوف تحصل على فوائد مثل:

  • تعديلات سهلة:
    قم بتعديل مستوى السجل في أي وقت دون إعادة تشغيل التطبيق. وهذا مفيد بشكل خاص أثناء استكشاف الأخطاء وإصلاحها.

  • الرؤية المحسنة:
    قم بالتبديل بسهولة إلى مستوى سجل أكثر تفصيلاً (على سبيل المثال، DEBUG) للحصول على رؤى أعمق حول مشكلات محددة، ثم قم بالتبديل مرة أخرى إلى مستوى أقل تفصيلاً (على سبيل المثال، INFO) للتشغيل المنتظم.

  • تحسين الأداء:
    يمكن أن يؤدي إنشاء عدد كبير من السجلات إلى إرباك نظام التسجيل، مما يؤدي إلى زيادة عمليات الإدخال/الإخراج واستهلاك الموارد، كما أن التغيير إلى مستوى التحذير أو مستوى الخطأ يقلل من عدد السجلات، ويعزز الأداء، وتقليل تكلفة السحابة.

ادعم GoFr من خلال إعطاء ⭐star: https://github.com/gofr-dev/gofr

علاوة على ذلك، يمكنك الوصول إلى نقطة النهاية العامة المجانية لتصدير وعرض آثار تطبيقك @ Tracer.gofr.dev. 
لتمكينه، أضف التكوين التالي في ملف .env الخاص بك

TRACE_EXPORTER=gofr

فوائد أخرى:
إذا كنت تساهم في GOFR سواء في التطوير أو كتابة المقالات. يمكنك الحصول على swags(قمصان، ملصقات) مجانًا عن طريق ملء النموذج المقدم على GitHub Readme (في الأسفل).

بيان الافراج هذه المقالة مستنسخة على: https://dev.to/aryanmehrotra/remote-runtime-log-level-change-using-golang-gofr-54d8?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] للحذف هو - هي
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3